package com.suke.czx.modules.goods.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.suke.czx.common.utils.FieldConstant;
import com.suke.czx.modules.goods.entity.Goods;
import com.suke.czx.modules.goods.entity.GoodsSearchBo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 应用模块名称: 物品
 * 代码描述: 物品持久层
 * copyright: AUZAR ALL RIGHTS RESERVED
 * company: AUZAR
 *
 * @author: 颜米晨
 * @date: 2021/09/03 15:18:05
 */
public interface GoodsMapper extends BaseMapper<Goods> {

    /**
     * 查询物品列表
     * @param goodsSearchBo 查询BO
     * @return 物品数据集
     */
    List<Goods> selectGoodsList(@Param("goodsSearchBo") GoodsSearchBo goodsSearchBo);

    /**
     * 查询合同相关物品列表
     * @param goodsSearchBo 查询BO
     * @return 物品数据集
     */
    List<Goods> selectContractGoodsList(@Param("goodsSearchBo") GoodsSearchBo goodsSearchBo);

    /**
     * 根据实际采购清单查询关联交付清单数据集
     * @param goodsSearchBo 查询BO
     * @param goodsIdList 实际采购清单物品编码数据集
     * @return 交付清单物品Map
     */
    @MapKey(value = FieldConstant.RELATION_ID)
    Map<Long, Goods> selectRelationPayGoodsMap(@Param("goodsSearchBo") GoodsSearchBo goodsSearchBo, @Param("goodsIdList") List<Long> goodsIdList);

    /**
     * 删除物品
     * @param goodsId 物品编码
     * @param userId 操作者编码
     */
    void updateDelGoods(@Param("goodsId") Long goodsId, @Param("userId") Long userId);

    /**
     * 查询项目合同清单物品
     * @param projectId 项目编码
     * @return 项目合同清单物品数据集
     */
    List<Goods> selectGoodsTypeContract(@Param("projectId") Long projectId);

    /**
     * 查询项目合同清单物品是否已有过同步操作
     * @param goodsIdList 项目合同清单物品编码数据集
     * @return 计划采购清单物品数据集
     */
    List<Goods> selectHasSyncGoodsTypePlan(@Param("goodsIdList") List<Long> goodsIdList);

    /**
     * 查询是否有计划采购清单物品可撤销同步
     * @param projectId 项目编码
     * @return 已同步的计划采购清单物品
     */
    List<Goods> selectGoodsTypePlan(@Param("projectId") Long projectId);

}
